home *** CD-ROM | disk | FTP | other *** search
Wrap
(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=aviloria (aviloria@yahoo.com) Title=FilmAffinity (ES) Description=Movie importation script for FilmAffinity Spain Site=http://www.filmaffinity.com Language=ES Version=1.0 Requires=3.5.0 Comments=Updated by folgui to: | - Separate import of Category and Description | - Search only by title to improve speed| License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.| GetInfo=1 [Options] ***************************************************) program FilmAffinity; const SearchBaseURL = 'http://www.filmaffinity.com/es/res.php?stext='; SearchPostFix = '&stype=tit'; BaseURL1 = 'http://www.filmaffinity.com/es/'; BaseURL2 = 'http://www.filmaffinity.com'; var MovieName: string; MovieURL: string; //------------------------------------------------------------------------------------ function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin Result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(Pattern, List.GetString(i)) <> 0 then begin Result := i; Break; end; end; //------------------------------------------------------------------------------------ function TextBetween(var S: string; StartTag: string; EndTag: string): string; var InitialPos: Integer; begin InitialPos := Pos(StartTag, S); Delete(S, 1, InitialPos + Length(StartTag) - 1); InitialPos := Pos(EndTag, S); result := copy(S, 1, InitialPos - 1); Delete(S, 1, InitialPos + 1); end; //------------------------------------------------------------------------------------ procedure AnalyzePage(Address: string); var Page: TStringList; LineNr: Integer; Line: string; MovieTitle, MovieAddress: string; begin Page := TStringList.Create; Page.Text := GetPage(Address); if Pos('<title>FilmAffinity', Page.Text) = 0 then begin ShowMessage('No se ha podido establecer la conexion.'); end else begin LineNr := FindLine('<td class="tt1" align="center">Resultados por Título</td>', Page, 0); LineNr := LineNr + 7; Line := Page.GetString(LineNr); if Pos ('No se han encontrado coincidencias', Line) <> 0 then begin ShowMessage('No se han encontrado resultados para "' + MovieName + '"'); end else begin PickTreeClear; Line := TextBetween (Line, '<b>', '</b>'); PickTreeAdd('Encontrados ' + Line + ' resultados para "' + MovieName + '"', ''); LineNr := LineNr + 9; Line := Page.GetString(LineNr); repeat MovieAddress := TextBetween (Line, '<a href="', '">'); MovieTitle := TextBetween (Line, '<span class="ntext">', '</span>'); HTMLDecode(Movietitle); PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress); LineNr := LineNr + 3; Line := Page.GetString(LineNr); until Pos('</ol>', Line) > 0; if PickTreeExec(Address) then AnalyzeMoviePage(Address); end; end; Page.Free; end; //------------------------------------------------------------------------------------ procedure AnalyzeMoviePage(Address: string); var Page: TStringList; LineNr, aux: Integer; Line: string; Item: string; Comments: string; Actors: string; Description: string; begin Comments := ''; Actors := ''; Description := ''; // URL SetField(fieldURL, Address); Page := TStringList.Create; Page.Text := GetPage(Address); // Translated Title LineNr := FindLine('<td align="center" class="tt1">', Page, 0); Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td align="center" class="tt1">', ' <img src='); HTMLDecode(Item); SetField(fieldTranslatedTitle, Trim (Item)); LineNr := LineNr + 8; Line := Page.GetString(LineNr); // Original Title if Pos ('TITULO ORIGINAL', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext">', '</td>'); HTMLDecode(Item); SetField(fieldOriginalTitle, Trim (Item)); LineNr := LineNr + 1; Line := Page.GetString(LineNr); end; // Picture if Pos ('owned by Studio', Line) > 0 then begin Item := TextBetween (Line, '<img src="', '" >'); GetPicture (BaseURL2 + Item); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Year if Pos ('AÑO', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext">', '</td>'); HTMLDecode(Item); SetField(fieldYear, Trim (Item)); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Length if Pos ('DURACIÓN', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext">', '</td>'); HTMLDecode(Item); aux := Pos (' min', Item); if aux > 0 then Delete (Item, aux, aux + 3); SetField(fieldLength, Trim (Item)); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Country if Pos ('PAÍS', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, 'alt="', '">'); HTMLDecode(Item); SetField(fieldCountry, Trim (Item)); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Director if Pos ('DIRECTOR', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '&stype=dir">', '</a>'); HTMLDecode(Item); SetField(fieldDirector, Trim (Item)); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Script writer if Pos ('GUIÓN', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext">', '</td>'); Comments := Comments + 'Guión: ' + Item + #13#10; LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Musician if Pos ('MUSICA', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext" >', '</td>'); Comments := Comments + 'Música: ' + Item + #13#10; LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Photography if Pos ('FOTOGRAFÍA', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext" >', '</td>'); Comments := Comments + 'Fotografía: ' + Item + #13#10; LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Actors if Pos ('REPARTO', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Actors := Actors + TextBetween (Line, '&stype=rep">', '</a>') + #13#10; while Pos ('&stype=rep"> ', Line) > 0 do Actors := Actors + TextBetween (Line, '&stype=rep"> ', '</a>') + #13#10; LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Productor if Pos ('PRODUCTORA', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<td class="ntext" colspan="2">', '</td>'); HTMLDecode(Item); SetField(fieldProducer, Trim (Item)); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Genere & Critic if Pos ('GÉNERO Y CRÍTICA', Line) > 0 then begin Line := Copy (Page.Text, 1, Length (Page.Text)); Line := StringReplace(Line, '<br />', #13#10); Line := TextBetween (Line, 'GÉNERO Y CRÍTICA', '</tr>'); Item := TextBetween (Line, '<td class="ntext" colspan="2">', '/ SINOPSIS:'); HTMLDecode(Item); SetField(fieldCategory, Trim(Item)); Description := TextBetween (Line, '/ SINOPSIS:', '</td>'); LineNr := FindLine('WEB OFICIAL', Page, LineNr); Line := Page.GetString(LineNr); end; // Official Webpage if Pos ('WEB OFICIAL', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10; LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; // Rating if Pos ('PUNTUACIÓN MEDIA', Line) > 0 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<b>', '</b>'); HTMLDecode(Item); if Length(Item) = 3 then // begin // Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0) + (StrToInt(StrGet(Item, 3), 0) / 10))); // end else // begin // Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0))); // end; SetField(fieldRating, Item); LineNr := LineNr + 3; Line := Page.GetString(LineNr); end; HTMLDecode(Comments); SetField(fieldComments, Comments); HTMLDecode(Actors); SetField(fieldActors, Actors); HTMLDecode(Description); SetField(fieldDescription, Description); end; //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ begin if CheckVersion(3,5,0) then begin MovieName := GetField(fieldOriginalTitle); if MovieName = '' then MovieName := GetField(fieldTranslatedTitle); if Input('Importar de FilmAffinity', 'Introduzca el titulo de la pelicula:', MovieName) then begin AnalyzePage(SearchBaseURL + UrlEncode(MovieName) + SearchPostfix); end; end else ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)'); end.